// 验证全部输入空格
export function validatorAllInputSpacing (rule, value, callback) {
  if (value === null || value === undefined) {
    return callback()
  }
  if (Object.prototype.toString.call(value) !== '[object String]') {
    return callback(new Error('您填写的内容不是字符串'))
  }
  if (value.trim() === '') {
    return callback(new Error('不能输入内容全部为空格'))
  }
  return callback()
}

// 验证手机号格式
export function validatorMobile (rule, value, callback) {
  console.log(value)
  if (value === null || value === undefined || value === '') {
    return callback()
  }
  var reg = /^1(3|4|5|7|8)\d{9}$/
  var v = value.split('').filter(item => item && item !== ' ').join('')
  if (new RegExp(reg).test(v)) {
    return callback()
  } else {
    return callback(new Error('手机号格式不正确'))
  }
}

// 验证特殊字符
export function validatorSpecialChara (rule, value, callback) {
  if (value === null || value === undefined || value === '') {
    return callback()
  }
  let warning = true
  if (rule.warning !== undefined) {
    warning = rule.warning
  }
  // allow: 允许的特殊字符
  var specialKey = "[`~!#$^&*()（）=|{}':;',\\[\\].<>/?~！#￥……&*（）--——|{}【】‘；：”“'。，、？] -+‘'《》%"
  var flg = false
  for (var i = 0; i < value.length; i++) {
    if (specialKey.indexOf(value[i]) >= 0) {
      if (rule.allow === undefined) { // 如果不包含允许字符则直接进行是否允许输入验证
        flg = true
        break
      }
      if (rule.allow.indexOf(value[i]) >= 0) { // 如果包含允许字符则允许输入
        flg = false
      } else {
        flg = true
        break
      }
    } else {
      flg = false
    }
  }
  if (flg) {
    if (warning) {
      return callback(new Error('不能输入不被允许的特殊字符(包括空格)'))
    } else {
      return callback(new Error(' '))
    }
  } else {
    return callback()
  }
}

// 验证数量与数值
export function validatorAmount (rule, value, callback) {
  /**
   * @param {Number} minAmout(最小数值限制: 非必填)
   * @param {Number} maxAmout(最大数值限制: 非必填)
   * @param {Number} decimaldigit(数值小数位位数限制: 非必填)
   */
  // console.log(rule, value, callback)
  if (value === null || value === undefined) {
    return callback()
  }
  if (Object.prototype.toString.call(value) !== '[object Number]') {
    return callback(new Error('您填写的不是一个数字'))
  }
  if (rule.minAmout) { // 如果最小数值限制存在
    if (value < rule.minAmout) {
      return callback(new Error('所填数值不能小于' + rule.minAmout))
    }
  }
  if (rule.maxAmout) { // 如果最大数值限制存在
    if (value > rule.maxAmout) {
      return callback(new Error('所填数值不能大于' + rule.maxAmout))
    }
  }
  if (rule.decimaldigit !== null || rule.decimaldigit !== undefined) { // 数值小数位位数限制
    if (value.toString().indexOf('.') !== -1) {
      if (value.toString().split('.')[1].length > rule.decimaldigit) {
        return callback(new Error('小数位位数不能大于' + rule.decimaldigit))
      }
    }
  }
  return callback()
}

// 验证是否为中文
export function validatorChinese (rule, value, callback) {
  if (value === null || value === undefined || value === '') {
    return callback()
  }
  if (new RegExp(/^[\u4e00-\u9fa5]+$/).test(value)) {
    return callback()
  } else {
    return callback(new Error('只能输入中文'))
  }
}

// 验证身份证格式
export function validatorIdCard (rule, value, callback) {
  if (value === null || value === undefined || value === '') {
    return callback()
  }
  var reg = /(^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)/
  if (new RegExp(reg).test(value)) {
    return callback()
  } else {
    return callback(new Error('身份证号码格式不正确'))
  }
}

// 验证输入长度限制
export function validatorInputLengthLimit (rule, value, callback) {
  if (value === null || value === undefined) {
    return callback()
  }
  /**
   * @param {Number} minInputLength(最大输入下限: 非必填)
   * @param {Number} maxInputLength(最大输入上限: 非必填)
   */
  // console.log(rule, value, callback)
  if (rule.minInputLength) { // 如果最小数值限制存在
    if (value.toString().length < rule.minInputLength) {
      return callback(new Error('输入字符不能少于' + rule.minInputLength))
    }
  }
  if (rule.maxInputLength) { // 如果最大数值限制存在
    if (value.toString().length > rule.maxInputLength) {
      return callback(new Error('输入字符不能大于' + rule.maxInputLength))
    }
  }
  return callback()
}

export default {
  // 验证全部输入空格
  validatorAllInputSpacing,
  // 验证手机号格式
  validatorMobile,
  // 验证特殊字符
  validatorSpecialChara,
  // 验证数量与数值
  validatorAmount,
  // 验证是否为中文
  validatorChinese,
  // 验证身份证格式
  validatorIdCard,
  // 验证输入长度限制
  validatorInputLengthLimit
}

// import * as Validator from '@/utils/Validator.js'
// 验证与 https://github.com/yiminghe/async-validator/

// Rules: function(rule, value, callback, source, options)

// 规则内容:参考 src/markdown/验证说明.md
